Oracle 19C学习 | 您所在的位置:网站首页 › group by 求总数oracle › Oracle 19C学习 |
GROUP BY子句 将数据表中的行分成较小的组。
GROUP BY子句语法 按照department_id进行分组,然后求每个部门的平均工资。 SELECT department_id, AVG(salary) FROM employees --先分组,再聚合 GROUP BY department_id ORDER BY department_id DEPARTMENT_ID AVG(SALARY) ------------- ----------- 10 4400 20 9500
按照多列分组: GROUP BY 字段1, 字段2 -- 先按照department_id进行分组,然后再对每个分组按照job_id再分组 SELECT department_id ,job_id, MAX(salary), AVG(salary) FROM employees GROUP BY department_id, job_id ORDER BY department_id /* 10 AD_ASST 4400 4400 20 MK_MAN 13000 13000 20 MK_REP 6000 6000 30 PU_CLERK 3100 2780 30 PU_MAN 11000 11000 */
非法查询范例 在SELECT语句中,除了聚合函数包含的列,其他的列必须出现在GROUP BY中。如果不在,则会出现聚合函数一个行与其他字段多行对应不上的情况,成为非法查询。
HAVING子句 当使用HAVING子句时,只显示与HAVING子句匹配的分组。 按照部门分组,查找出平均大于8000工资的部门,查看每个部门的人数是多少。 SELECT department_id, COUNT(last_name) FROM employees GROUP BY department_id HAVING AVG(salary) >= 8000 ORDER BY department_id; DEPARTMENT_ID COUNT(LAST_NAME) ------------- ---------------- 20 2 70 1 80 34 90 3 100 6 110 2
Having可以与WHERE同时出现。 WHERE先限制第一步筛选出来的记录,然后在进行分组,分组后在使用HAVING设定的条件提取出来符合条件的分组。 SELECT department_id, COUNT(last_name), job_id, AVG(salary) FROM employees WHERE job_id LIKE '%PROG' GROUP BY department_id, job_id HAVING AVG(salary) < 8000; DEPARTMENT_ID COUNT(LAST_NAME) JOB_ID AVG(SALARY) ------------- ---------------- ---------- ----------- 60 5 IT_PROG 5760
聚合函数的嵌套 计算出平均工资最高的那个部门。
|
CopyRight 2018-2019 实验室设备网 版权所有 |